package com.imooc.bilibili.dao;

import com.imooc.bilibili.domain.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

@Repository
public interface VideoDao {

    /**
     * 添加视屏
     * @param video
     * @return
     */
    Integer addVideos(Video video);

    /**
     * 添加视频标签
     * @param videoTagList
     * @return
     */
    Integer batchAddVideoTags(@Param("videoTagList") List<VideoTag> videoTagList);

    /**
     * 查询该分区下的总视频条数
     * @param params
     * @return
     */
    Integer pageCountVideos(Map<String, Object> params);

    /**
     * 视频分区分页查询
     * @param params
     * @return
     */
    List<Video> pageListVideos(Map<String, Object> params);

    /**
     * 通过id查询对应视频
     * @param videoId
     * @return
     */
    Video getVideoById(Long videoId);

    /**
     * 通过用户id和视频id查询对应视频点赞记录
     * @param userId
     * @param videoId
     * @return
     */
    VideoLike getVideoLikeByUserIdAndVideoId(@Param("userId") Long userId, @Param("videoId") Long videoId);

    /**
     * 添加点赞记录
     * @param videoLike
     * @return
     */
    Integer addVideoLike(VideoLike videoLike);

    /**
     * 取消点赞
     * @param userId
     * @param videoId
     * @return
     */
    Integer deleteVideoLike(@Param("userId") Long userId, @Param("videoId") Long videoId);

    /**
     * 获取视频点赞的数量
     * @param videoId
     * @return
     */
    Long getCountVideoLikes(Long videoId);

    /**
     * 删除视频收藏
     * @param userId
     * @param videoId
     * @return
     */
    Integer deleteVideoCollection(@Param("userId") Long userId, @Param("videoId") Long videoId);

    /**
     * 添加视频收藏
     * @param videoCollection
     * @return
     */
    Integer addVideoCollection(VideoCollection videoCollection);

    /**
     * 获取视频的收藏数量
     * @param videoId
     * @return
     */
    Long getCountVideoCollection(Long videoId);

    /**
     * 通过用户id和视频id查询对应视频收藏记录
     * @param videoId
     * @param userId
     * @return
     */
    VideoCollection getVideoCollectionByUserIdAndVideoId(@Param("videoId") Long videoId, @Param("userId") Long userId);

    /**
     * 通过用户id和视频id查询视频投币记录
     * @param videoId
     * @param userId
     * @return
     */
    VideoCoin getVideoCoinByUserIdAndVideoId(@Param("videoId") Long videoId, @Param("userId") Long userId);

    /**
     * 添加视频投币
     * @param videoCoin
     * @return
     */
    Integer addVideoCoins(VideoCoin videoCoin);

    /**
     * 更新视频投币
     * @param videoCoin
     * @return
     */
    Integer updateVideoCoin(VideoCoin videoCoin);

    /**
     * 查询视频投币总数
     * @param videoId
     * @return
     */
    Integer getVideoCoins(Long videoId);

    /**
     * 添加视频评论
     * @param videoComment
     * @return
     */
    Integer addVideoComment(VideoComment videoComment);

    /**
     * 获取视频的评论数量
     * @param params
     * @return
     */
    Integer getCountVideoComments(Map<String, Object> params);

    /**
     * 视频评论的分页查询
     * @param params
     * @return
     */
    List<VideoComment> pageListVideoComments(Map<String, Object> params);

    /**
     * 获取视频二级评论
     * @param parentIdSet
     * @return
     */
    List<VideoComment> batchGetVideoCommentsByRootId(@Param("parentIdSet") Set<Long> parentIdSet);

    /**
     * 添加视频观看记录
     * @param videoView
     * @return
     */
    Integer addVideoView(VideoView videoView);

    /**
     * 获取观看记录
     * @param params
     * @return
     */
    VideoView getVideoViews(Map<String, Object> params);

    /**
     * 查询视频观看次数
     * @param videoId
     * @return
     */
    Integer getVideoViewCounts(Long videoId);
}
